package com.sc.thread.deamonthread;

import java.util.Scanner;

/**
 * Created by Shen Chao on 2018-06-14-014.
 *
 * JVM中存在两种线程：用户线程和守护线程。
 * 当线程中只剩下守护线程时JVM就会退出，反之还有任意一个用户线程在，JVM都不会退出。
 * 开始一个自定义的守护进程，就是在Thread.start()方法之前使用setDaemon(true)方法
 * 通过此方法将Thread类中的boolean daemon=true;JVM就会将该线程归为守护线程。
 */
public class DeamonRunner implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 3; i++) {
            System.out.println("守护线程");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Thread deamonThread = new Thread(new DeamonRunner());
        //设为守护线程
        deamonThread.setDaemon(true);
        deamonThread.start();
        System.out.println("isDeamon:" + deamonThread.isDaemon());
        //接受输入，使程序停顿，用户输入，main结束，jvm退出
        Scanner scanner = new Scanner(System.in);
        scanner.next();
        //addShutdownHook方法增加jvm推出时的处理
        Runtime.getRuntime().addShutdownHook(
                new Thread(() -> System.out.println("jvm exit")));
    }
}
